AWS が公開しているサーバレスなゲノム解析環境を構築してみた
Web UI で Amazon Omics を操作するサンプルコードを AWS が公開しているため試してみました。非常におもしろい内容でしたのでご興味のある方にはぜひ触っていただきたいので紹介します。
本記事では、以下の記事内容と、サンプルコードから構築した環境で Omics Workflows を実行した内容を取り上げます。
この記事はなに?
エーザイ株式会社の創薬研究チームと AWS の取り組みで、Amazon Omics をバックエンドで利用して Web UI から操作するサーバレスアーキテクチャの開発するプロトタイピングが行われていました。その成果物として同環境を構築できる AWS CDK のサンプルコードが GitHub で公開されています。
リポジトリ: aws-samples/amazon-omics-analysis-app
サーバレスアーキテクチャ構成
常時必要とされるわけでもない研究利用の Web アーキテクチャとしてはサーバレスが相性いいですよね。と私は思っています。
今回のプロトタイプでは、Amazon CloudFront + AWS Lambda / AWS Step Functions + Amazon Omics、結果の可視化には Amazon Athena + Amazon QuickSight という形で、AWS のサービスをフル活用したサーバーレスな構成のシステムとなっており、これらを AWS CDK でまとめてデプロイできるようになっています。」
美しい設計です。Step Functions で Omics Workflows の制御は興味深いものがあります。
Web UI の需要
バイオインフォマティシャンは CLI で構わないけど、一般的な研究者は Web UI から操作したい話はたびたび聞きます。ご多分に漏れずエーザイ様も同じ需要があったようです。
もちろん Amazon Omics も AWS マネジメントコンソールからウェブの UI で操作はできますが、WET 研究員にとってはハードルが高いですし、それに加えて、ゲノムという個人情報を扱う上でのアクセス管理や、データ保全、解析ワークフローのメンテナンスなど WET 研究員に直接 AWS マネジメントコンソールでの操作をしてもらうのではなく、Amazon Omics を裏側の解析サービスとして利用し、ユーザーは裏側の仕組みがわからなくても利用可能なウェブシステムを開発いただきました。
環境構築して Web UI から操作してみる
README を参考に AWS CDK でフロントエンドと、バックエンドに分けて2回デプロイしました。合計で10分ほどでデプロイが完了しました。
amazon-omics-analysis-app/README.ja.md at main · aws-samples/amazon-omics-analysis-app · GitHub
デプロイ完了すると CloudFront の URL が表示されます。こちらの URL にアクセスして Web UI から Amazon Omics を操作します。
サインインしてみる
CloudFront の URL へアクセスすると Cognito のお馴染みのサインイン画面が表示されました。アカウント作成タブがあるのでアカウントを作成したところ、Congito ユーザープールへのアクセス許可がないとエラーになりました。要はアカウントを作成できませんでした。
CDK のコードを確認してみるとセルフサインイン(アカウント作成)が無効化されていました。せっかくなので Web UI から新規アカウントを作成できるようにコードを変更して更新かけました。
// Cognito ユーザープールを作成 this.userPool = new cognito.UserPool(this, "UserPool", { userPoolName: `${stageName ?? ""}OmicsUserPool`, selfSignUpEnabled: true, // ユーザー自身によるサインアップを有効化 standardAttributes: { email: { required: true, // メールアドレスを必須プロパティに設定 mutable: true, // メールアドレスを変更可に設定(AzureAD連携に必要) }, },
改めてアカウント作成タブから、メールアドレスとパスワードを入力してアカウントを作成できました。
Amazon Omics Analysis App を使ってみる
こちらがメインページとなっています。Analysis List に実行履歴が表示されていました。どこの値を拾ってきているのか調べてみます。
確認してみると Omics Workflows の実行履歴の値を拾って表示していました。過去に Omics Workflows を実行していたことを思い出しました。
実行してみる
プライベートワークフローに過去に作成した GreetingsNF-2 が成功実績あったので Web UI からも実行可能か試してみます。
パラメータを求められたので過去の実行履歴を参考に同じ値を入力しました。
確認画面を経て Omics Workflows でジョブの実行します。
実行したジョブの状態がSTARING
で表示されました。前回の実行時間を確認すると10分はかかるのでマネージメントコンソールから実行の裏側を覗いてみます。
プライベートワークフローの GreetingsNF-2 から実行中のジョブを確認できました。
Omics Workflows でジョブの実行するためにはまず API Gateway でリクエストを受けて Lambda から Step Functions を呼んでいる構成でした。実際に Step Functions を確認してみるとが実行中でした。本構成のステーマシン定義の解説は以下のリンクされています。
マネージメントコンソールを覗いている間にジョブが完了していました。実行結果も Web UI から確認できています。
完了したジョブをクリックすると詳細を画面が開きます。与えたパラメータをecho
で返すだけのワークフローだったので見栄えする結果はなかったです。
簡単ではありますが AWS がエーザイ様向けに提供されてプロトタイピングプログラムの成果物である Amazon Omics を Web UI から実行できる環境の実行紹介でした。
補足 GreetingsNF-2 の内容
今回実行した過去に登録していたプライベートワークフローの内容を載せておきます。実行するサンプルがないときに参考にしてください。
ちなみに登録したワークフローはマネージメントコンソールからダウンロードできます。
Nextflow で定義したワークフロー全文です。与えられたパラメータをecho
で返すだけです。
nextflow.enable.dsl = 2 params.greeting = 'hello' params.addressee = null if (!params.addressee) exit 1, "required parameter 'addressee' missing" process Greet { publishDir '/mnt/workflow/pubdir' input: val greeting val addressee output: path "output", emit: output_file script: """ echo "${greeting} ${addressee}" | tee output """ } workflow { Greet(params.greeting, params.addressee) }
Omics Workflows 用にパラメータ定義として JSON ファイルを作成する必要があります。そのファイルの内容です。
{ "greeting": {"description": "(string) greeting to use"}, "addressee": {"description": "(string) who to greet"} }
おわりに
すばらしい成果物の公開ありがとうございました。私はフロントエンドの実装はぜんぜん明るくないため、サンプルコードを見ながら学ばせていただきたいと思います。
以下の文面からすると nf-core で提供されているワークフローを Omics Workflows で実行するのは容易なようです。私は Nextflow の基本的な書き方を学んでいる段階でまだ試したことはありませんでした。
プロトタイピングを実施したことで、nf-core に登録されているワークフローをほとんど手間をかけることなく Amazon Omics で利用でき、さらにそれをユーザーが簡単にウェブから利用できることがわかりました。」